home *** CD-ROM | disk | FTP | other *** search
- ;* LANG.INC
- ;*
- ;* Language-dependent macros and conditional assembly
- ;*
- ;* $Id: lang.inc,v 1.4 1997/01/16 18:41:59 pekangas Exp $
- ;*
- ;* Copyright 1996,1997 Housemarque Inc.
- ;*
- ;* This file is part of the MIDAS Sound System, and may only be
- ;* used, modified and distributed under the terms of the MIDAS
- ;* Sound System license, LICENSE.TXT. By continuing to use,
- ;* modify or distribute this file you indicate that you have
- ;* read the license and understand and accept it fully.
- ;*
-
-
- IFDEF __BPREAL__
- ; Borland Pascal 7 in Real Mode
-
- LANG EQU PASCAL
-
- MODEL TPASCAL
-
- MACRO IDATASEG
- CODESEG
- ENDM
-
- __PASCAL__ = 1
- __REALMODE__ = 1
- __16__ = 1
-
- ELSE
- IFDEF __BPPROT__
- ; Borland Pascal 7 in Protected Mode
-
- LANG EQU PASCAL
-
- MODEL TPASCAL
-
- MACRO IDATASEG
- CODESEG
- ENDM
-
- __PASCAL__ = 1
- __PROTMODE__ = 1
- __16__ = 1
- __DPMI__ = 1
- __IRQPASSUP__ = 1
- NOEMS = 1
- ELSE
- IFDEF __BC16__
- ; Borland C in 16-bit Real Mode
-
- ; a hack to force 16-byte segment alignment:
-
- MACRO MKSEG __name_, __text_
- SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
- ASSUME cs:&__name_&__text_, ds:@data
- ENDM
- MKSEG %@FileName, _TEXT
- ENDS
-
- MODEL LARGE,C
-
- LANG EQU C
-
- MACRO IDATASEG
- DATASEG
- ENDM
-
- __C__ = 1
- __REALMODE__ = 1
- __16__ = 1
- ELSE
- IFDEF __WC16__
- ; Watcom C in 16-bit Real Mode
-
- ; a hack to force 16-byte segment alignment:
-
- MACRO MKSEG __name_, __text_
- SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
- ASSUME cs:&__name_&__text_, ds:@data
- ENDM
- MKSEG %@FileName, _TEXT
- ENDS
-
- MODEL LARGE,C
-
- LANG EQU C
-
- MACRO IDATASEG
- DATASEG
- ENDM
-
- __C__ = 1
- __REALMODE__ = 1
- __16__ = 1
- ELSE
- IFDEF __ASM16__
- ; Pure assembler in 16-bit real mode
-
- ; Assembler version uses MODEL C, and defines C as the language.
-
- ; a hack to force 16-byte segment alignment:
-
- MACRO MKSEG __name_, __text_
- SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
- ASSUME cs:&__name_&__text_, ds:@data
- ENDM
- MKSEG %@FileName, _TEXT
- ENDS
-
- MODEL LARGE,C
-
- LANG EQU C
-
- MACRO IDATASEG
- DATASEG
- ENDM
-
- __ASM__ = 1
- __REALMODE__ = 1
- __16__ = 1
- ELSE
- IFDEF __WC32__
- ; Watcom C in 32-bit Protected Mode
-
- ; a hack to force 16-byte segment alignment:
-
- SEGMENT _TEXT PARA PUBLIC USE32 "CODE"
- ENDS
- SEGMENT _DATA PARA PUBLIC USE32 "DATA"
- ENDS
-
- MODEL FLAT,C
-
- LANG EQU C
-
- MACRO IDATASEG
- DATASEG
- ENDM
-
- __C__ = 1
- __32__ = 1
- __DPMI__ = 1
- __PROTMODE__ = 1
- __IRQPASSUP__ = 1
- NOEMS = 1
- ELSE
- IFDEF __VC32__
- ; Visual C 32-bit mode
-
- ; a hack to force 16-byte segment alignment:
-
- SEGMENT _TEXT PARA PUBLIC USE32 "CODE"
- ENDS
- SEGMENT _DATA PARA PUBLIC USE32 "DATA"
- ENDS
-
- MODEL FLAT,C
-
- LANG EQU C
-
- MACRO IDATASEG
- DATASEG
- ENDM
-
- __C__ = 1
- __32__ = 1
- __DPMI__ = 1
- __PROTMODE__ = 1
- __IRQPASSUP__ = 1
- NOEMS = 1
- ELSE
- ERR Destination language not defined
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
-
-
-
-
- ;/***************************************************************************\
- ;* Memory model dependent macros and equates:
- ;\***************************************************************************/
-
-
- IFDEF __32__
- ; 32-bit flat model
-
- ; Prerred register size equates:
- _ax EQU eax
- _bx EQU ebx
- _cx EQU ecx
- _dx EQU edx
- _si EQU esi
- _di EQU edi
- _bp EQU ebp
- _sp EQU esp
-
- ; Default pointer combinations:
- _essi EQU esi
- _esdi EQU edi
- _esbx EQU ebx
- _esbp EQU ebp
- _fssi EQU esi
- _fsdi EQU edi
- _fsbx EQU ebx
- _fsbp EQU ebp
- _gssi EQU esi
- _gsdi EQU edi
- _gsbx EQU ebx
- _gsbp EQU ebp
-
- ; Data types
- _int EQU dword
- INTSIZE = 4
- _long EQU dword
- LONGSIZE = 4
- _funct EQU near
- _defptr EQU near
- _ptr EQU dword
- PTRSIZE = 4
- _farptr EQU pword
- FARPTRSIZE = 6
- _nearptr EQU dword
- NEARPTRSIZE = 4
-
- MACRO D_int name
- &name DD ?
- ENDM
-
- MACRO D_long name
- &name DD ?
- ENDM
-
- MACRO D_ptr name
- &name DD ?
- ENDM
-
- MACRO D_farptr name
- &name DP ?
- ENDM
-
- MACRO D_nearptr name
- &name DD ?
- ENDM
-
- ptr_to EQU offset
- farptr_to EQU far ptr
- nearptr_to EQU offset
-
- ; LOADPTR - loads a default pointer type
- MACRO LOADPTR segreg, indexreg, pointer
- mov indexreg, pointer
- ENDM
-
- ; COPYPTR - copies a default pointer type variable (destroys eax)
- MACRO COPYPTR destptr, sourceptr
- mov eax,sourceptr
- mov destptr,eax
- ENDM
-
- ; PUSHSEGREG - pushes a segment register in 16-bit modes
- MACRO PUSHSEGREG segreg
- ENDM
-
- ; POPSEGREG - pops a segment register in 16-bit modes
- MACRO POPSEGREG segreg
- ENDM
- ENDIF
-
- IFDEF __16__
- ; All 16-bit models
-
- ; Prerred register size equates:
- _ax EQU ax
- _bx EQU bx
- _cx EQU cx
- _dx EQU dx
- _si EQU si
- _di EQU di
- _bp EQU bp
- _sp EQU sp
-
- ; Default pointer combinations:
- _essi EQU es:si
- _esdi EQU es:di
- _esbx EQU es:bx
- _esbp EQU es:bp
- _fssi EQU fs:si
- _fsdi EQU fs:di
- _fsbx EQU fs:bx
- _fsbp EQU fs:bp
- _gssi EQU gs:si
- _gsdi EQU gs:di
- _gsbx EQU gs:bx
- _gsbp EQU gs:bp
-
- ; Data types
- _int EQU word
- INTSIZE = 2
- _long EQU dword
- LONGSIZE = 4
- _funct EQU far
- _defptr EQU far
- _ptr EQU dword
- PTRSIZE = 4
- _farptr EQU dword
- FARPTRSIZE = 4
- _nearptr EQU word
- NEARPTRSIZE = 2
-
- MACRO D_int name
- &name DW ?
- ENDM
-
- MACRO D_long name
- &name DD ?
- ENDM
-
- MACRO D_ptr name
- &name DD ?
- ENDM
-
- MACRO D_farptr name
- &name DD ?
- ENDM
-
- MACRO D_nearptr name
- &name DW ?
- ENDM
-
- ptr_to EQU far ptr
- farptr_to EQU far ptr
- nearptr_to EQU offset
-
- ; LOADPTR - loads a default pointer type
- MACRO LOADPTR segreg, indexreg, pointer
- IFIDNI <&segreg>,<ds>
- lds indexreg,pointer
- ELSE
- IFIDNI <&segreg>,<es>
- les indexreg,pointer
- ELSE
- IFIDNI <&segreg>,<fs>
- lfs indexreg,pointer
- ELSE
- IFIDNI <&segreg>,<gs>
- lgs indexreg,pointer
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDM
-
- ; COPYPTR - copies a default pointer type variable (destroys eax)
- MACRO COPYPTR destptr, sourceptr
- mov eax,sourceptr
- mov destptr,eax
- ENDM
-
- ; PUSHSEGREG - pushes a segment register in 16-bit modes
- MACRO PUSHSEGREG segreg
- push segreg
- ENDM
-
- ; POPSEGREG - pops a segment register in 16-bit modes
- MACRO POPSEGREG segreg
- pop segreg
- ENDM
- ENDIF
-
-
- ;* $Log: lang.inc,v $
- ;* Revision 1.4 1997/01/16 18:41:59 pekangas
- ;* Changed copyright messages to Housemarque
- ;*
- ;* Revision 1.3 1996/07/16 20:20:50 pekangas
- ;* Added support for Visual C
- ;*
- ;* Revision 1.2 1996/05/30 22:38:46 pekangas
- ;* no changes?
- ;*
- ;* Revision 1.1 1996/05/22 20:49:33 pekangas
- ;* Initial revision
- ;*